package me.dr0n3.skyRanks.Utils;

import java.io.*;
import java.util.Set;
import java.util.logging.Level;
import me.dr0n3.skyRanks.Rank;
import me.dr0n3.skyRanks.skyRanks;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

/**
 * @author dr0n3
 * @date 20.04.2012
 */
public class IOHelper 
{
    public static String mainDirectory = "plugins/skyRanks";
    
    public static Long loadPlaytime(Player player)
    {
        if(new File(mainDirectory + "/data/" + player.getName() + ".txt").exists())
        {
            BufferedReader br = null;
            try
            {
                br = new BufferedReader(new FileReader(mainDirectory + "/data/" + player.getName() + ".txt"));
                long l = Long.parseLong(br.readLine());
                br.close();
                return l;
            }
            catch(Exception e)
            {
                MessageHelper.writeLog("Konnte Spielzeit von " + player.getName() + " nicht laden.", Level.WARNING);
                skyRanks.lBlocked.add(player);
                player.sendMessage(ChatColor.RED + "Aufgrund eines Fehlers konnte deine Spielzeit nicht geladen werden.");
                player.sendMessage(ChatColor.RED + "Sie wurde zum Schutz eingefroren. Bitte benachrichtige einen Admin.");
            }
            finally
            {
                try 
                {
                    br.close();
                } 
                catch (IOException ex) 
                {
                    MessageHelper.writeLog("Konnte Spielzeit von " + player.getName() + " nicht laden und keine Ressourcen freigeben!", Level.WARNING);
                    skyRanks.lBlocked.add(player);
                    player.sendMessage(ChatColor.RED + "Aufgrund eines Fehlers konnte deine Spielzeit nicht geladen werden.");
                    player.sendMessage(ChatColor.RED + "Vielleicht hilft ein Relog :)");
                }
            }
        }
        
        return Long.parseLong("0");
    }
    
    public static Long loadPlaytime(Player player, String s)     
    {         
        if(new File(mainDirectory + "/data/" + s + ".txt").exists())         
        {             
            BufferedReader br = null;
            try             
            {                 
                br = new BufferedReader(new FileReader(mainDirectory + "/data/" + s + ".txt"));
                long l = Long.parseLong(br.readLine());                 
                br.close();                 
                return l;             
            }             
            catch(Exception e)             
            {                 
                return Long.parseLong("0");             
            }             
            finally             
            {                 
                try                  
                {                     
                    br.close();               
                }                  
                catch (IOException ex)                  
                {                                      
                    
                }             
            }         
        }         
        else             
            return Long.parseLong("0");     
    }
    
    public static void savePlaytime(Player player, Long l)
    {
        if(!skyRanks.lBlocked.contains(player))
        {
            BufferedWriter bw = null;
            try 
            {
                long oldPlaytime = loadPlaytime(player);
                long actPlaytime = System.currentTimeMillis() - l;
                 long playtime = oldPlaytime + actPlaytime;
                bw = new BufferedWriter(new FileWriter(mainDirectory + "/data/" + player.getName() + ".txt"));
                bw.write(String.valueOf(playtime));
                bw.close();
            } 
            catch (IOException ex) 
            {
                ex.printStackTrace();
                MessageHelper.writeLog("Konnte Spielzeit von " + player.getName() + " nicht speichern.", Level.WARNING);
            }
            finally
            {
                try 
                {
                    bw.close();
                } 
                catch (IOException ex) 
                {
                    ex.printStackTrace();
                    MessageHelper.writeLog("Konnte Spielzeit von " + player.getName() + " nicht speichern und keine Ressourcen freigeben!", Level.WARNING);
                }
            }
        }
        else
            MessageHelper.writeLog("Spielzeit von " + player.getName() + " wurde nicht gespeichert (geblockt)!", Level.WARNING);
    }
    
    public static void loadConfig(skyRanks plugin)
    {
        try
        {
            Set<String> keys = plugin.getConfig().getConfigurationSection("Ranks").getKeys(false);
            
            for(String s : keys)
            {
                String node = "Ranks." + s;
                
                Rank r = new Rank(s,
                        plugin.getConfig().getString(node + ".oldGroupName"),
                        plugin.getConfig().getString(node + ".newGroupName"),
                        plugin.getConfig().getLong(node + ".time"));
                
                if(PermissionsHelper.isRankValid(r))
                    PermissionsHelper.hmRanks.put(r, r.lTime);
                else
                    MessageHelper.writeLog("Konnte Config nicht laden. Rang '" + r.sName + "' ist fehlerhaft!", Level.SEVERE);
            }
        }
        catch(Exception e)
        {
            
        }
    }
}
